/*
公有api处理
1:安装axios
2:导入axios
3:创建一个副本
4:设置拦截器
5:暴露出去

*/
import axios from 'axios'
// 导入toast  Toast===this.$toast
import { Toast } from 'vant'
// 导入删除token工具型方法
import { removeLocal } from '@/utils/local.js'
// 导入store  store===this.$store
import store from '@/store'
// 导入router  router===this.$router
import router from '@/router'
// 创建一个副本
const _fetch = axios.create({
  baseURL: process.env.VUE_APP_URL
})
// 请求拦截
_fetch.interceptors.request.use(
  function (config) {
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 响应拦截
_fetch.interceptors.response.use(
  function (res) {
    /*
    如果正常返回
        return res
    如果token异常
        删除token
        提示一下
        修改当前vuex中的登陆状态
        跳转到登陆页
        中止.then执行直接执行.catch
    其它错误
        提示一下
        中止.then执行直接执行.catch    
    */

    if (res.data.code === 200) {
      return res
    } else if (res.data.code === 401 || res.data.code === 403) {
      // 删除token
      removeLocal('token')
      // 提示一下
      Toast.fail(res.data.message)
      // 修改当前vuex中的登陆状态
      store.commit('setIsLogin', false)
      // 跳转登陆页  this.$router.push("/login")
      router.push('/login')
      // 中止.then执行直接执行.catch
      // return Promise.reject(res.data.message)
      // 如果eslint比较规范的情况下错误信息 new Error
      return Promise.reject(new Error(res.data.message))
    } else {
      // this.$toast
      Toast.fail(res.data.message)
      // 中止.then执行直接执行.catch
      // return Promise.reject(res.data.message)
      // 如果eslint比较规范的情况下错误信息 new Error
      return Promise.reject(new Error(res.data.message))
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)
export default _fetch
